자바 오버라이딩

IT 위키

자바 오버라이딩(Java Overriding, 上書定義)은 자바에서 상속 관계에 있는 하위 클래스가 상위 클래스의 메서드를 재정의하여 자신만의 방식으로 구현하는 객체 지향 프로그래밍의 핵심 개념 중 하나이다.

1 개요[편집 | 원본 편집]

오버라이딩은 다형성을 실현하기 위한 주요 수단으로, 상속받은 메서드의 기본 동작을 하위 클래스의 요구에 맞게 변경할 수 있다. 이를 통해 코드 재사용성과 유연성을 높일 수 있으며, 런타임 시점에 호출할 메서드가 결정되는 동적 바인딩(Dynamic Binding)을 가능하게 한다.

2 오버라이딩의 조건[편집 | 원본 편집]

  • 메서드 이름, 매개변수 목록, 반환형이 상위 클래스의 메서드와 동일해야 함
  • 접근 제어자는 상위 클래스보다 좁을 수 없음 (예: public → private 불가)
  • final, static, private 메서드는 오버라이딩 불가
  • @Override 어노테이션 사용 권장 (컴파일 시 정확성 검증 가능)

3 예제[편집 | 원본 편집]

다음은 오버라이딩의 기본 예제이다.

class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // 출력: 멍멍!
    }
}

4 오버로딩과의 차이[편집 | 원본 편집]

  • 오버라이딩: 상위 클래스의 메서드를 동일한 시그니처로 재정의
  • 오버로딩: 같은 클래스 내에서 이름은 같되 매개변수가 다른 메서드를 여러 개 정의

5 주의 사항[편집 | 원본 편집]

  • 생성자는 오버라이딩 대상이 아니다
  • 예외(Exception) 처리 시, 오버라이딩 메서드는 상위 클래스보다 더 넓은 범위의 예외를 던질 수 없다
  • 다형성 사용 시 오버라이딩된 메서드가 실제 객체 기준으로 호출됨

6 관련 키워드[편집 | 원본 편집]

  • @Override 어노테이션
  • 다형성(polymorphism)
  • 동적 바인딩(Dynamic Binding)
  • 상속(inheritance)

7 같이 보기[편집 | 원본 편집]

8 참고 문헌[편집 | 원본 편집]

  • Joshua Bloch, *Effective Java*, Addison-Wesley, 2018.
  • Kathy Sierra and Bert Bates, *Head First Java*, O'Reilly Media, 2022.

9 각주[편집 | 원본 편집]